package com.example.demo.service;

import com.example.demo.account.AccountInfo;
import com.example.demo.entity.CopyrightEntity;
import com.example.demo.entity.CopyrightTradeRequestEntity;
import com.example.demo.model.CopyrightInfo;
import com.example.demo.model.CopyrightTradeRequestInfo;
import com.example.demo.repository.CopyrightRepository;
import com.example.demo.repository.CopyrightTradeRequestRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 版权交易服务接口
 */
public interface CopyrightTradeService {
    
    /**
     * 发起交易请求
     * @param fromAddress 发起方地址
     * @param toAddress 接收方地址
     * @param blockchainId 版权ID
     * @param requestType 请求类型：目前仅支持 2-转让
     * @return 交易请求ID
     */
    Long createTradeRequest(String fromAddress, String toAddress, String blockchainId, Integer requestType);
    
    /**
     * 接受交易请求
     * @param requestId 请求ID
     * @param toAddress 接收方地址
     * @return 处理结果
     */
    boolean acceptTradeRequest(Long requestId, String toAddress);
    
    /**
     * 拒绝交易请求
     * @param requestId 请求ID
     * @param toAddress 接收方地址
     * @param reason 拒绝原因
     * @return 处理结果
     */
    boolean rejectTradeRequest(Long requestId, String toAddress, String reason);
    
    /**
     * 获取发起的交易请求
     * @param fromAddress 发起方地址
     * @return 交易请求列表
     */
    List<CopyrightTradeRequestInfo> getSentTradeRequests(String fromAddress);
    
    /**
     * 获取收到的交易请求
     * @param toAddress 接收方地址
     * @return 交易请求列表
     */
    List<CopyrightTradeRequestInfo> getReceivedTradeRequests(String toAddress);
    
    /**
     * 获取待处理的交易请求
     * @param toAddress 接收方地址
     * @return 交易请求列表
     */
    List<CopyrightTradeRequestInfo> getPendingTradeRequests(String toAddress);
    
    /**
     * 获取交易请求详情
     * @param requestId 请求ID
     * @return 交易请求详情
     */
    CopyrightTradeRequestInfo getTradeRequestDetail(Long requestId);
} 